package com.zwz.mall.utils;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;

import java.math.BigDecimal;


/**
 *
 * Description: JSON值读取工具类.
 *
 */

public class JSONUtils
{
    public static boolean getBoolean(String key, JSONObject json)
    {
        return getBoolean(key, json, false);
    }

    public static boolean getBoolean(String key, JSONObject json, boolean defaultValue)
    {
        boolean value = defaultValue;

        if (json == null)
        {
            return false;
        }

        try
        {
            if (json.containsKey(key))
            {
                value = (json.getIntValue(key) == 1);
            }
        }
        catch (JSONException e)
        {
            // 这里无需将异常向外抛出，后续可以在此专门记录服务端的错误
            e.printStackTrace();
        }

        return value;
    }

    public static int getInteger(String key, JSONObject json)
    {
        return getInt(key, json, 0);
    }
    public static int getInt(String key, JSONObject json)
    {
        return getInt(key, json, 0);
    }

    public static int getInt(String key, JSONObject json, int defaultValue)
    {

        int value = defaultValue;

        if (json == null)
        {
            return value;
        }

        try
        {
            if (json.containsKey(key))
            {
                value = json.getIntValue(key);
            }
        }
        catch (JSONException e)
        {
            // 这里无需将异常向外抛出，后续可以在此专门记录服务端的错误
            e.printStackTrace();
        }

        return value;
    }
    public static int getInt(int key, JSONArray json)
    {
        return getInt(key, json, 0);
    }
    public static long getLong(int key, JSONArray json)
    {
        return getInt(key, json, 0);
    }

    public static int getInt(int key, JSONArray json, int defaultValue)
    {

        int value = defaultValue;

        if (json == null)
        {
            return value;
        }

        try
        {
                value = json.getIntValue(key);
        }
        catch (JSONException e)
        {
            // 这里无需将异常向外抛出，后续可以在此专门记录服务端的错误
            e.printStackTrace();
        }

        return value;
    }

    public static long getLong(String key, JSONObject json)
    {

        long value = 0;

        if (json == null)
        {
            return value;
        }

        try
        {
            if (json.containsKey(key))
            {
                value = json.getLong(key);
            }
        }
        catch (JSONException e)
        {
            // 这里无需将异常向外抛出，后续可以在此专门记录服务端的错误
            e.printStackTrace();
        }

        return value;
    }

    public static String getString(String key, JSONObject json)
    {
        String value = "";

        if (json == null)
        {
            return value;
        }

        try
        {
            if (json.containsKey(key))
            {
                value = json.getString(key);
            }
        }
        catch (JSONException e)
        {
            // 这里无需将异常向外抛出，后续可以在此专门记录服务端的错误
            e.printStackTrace();
        }

        return value;
    }


    public static double getDouble(String key, JSONObject json)
    {
        if (json == null)
        {
            return 0;
        }
        try
        {
            if (json.containsKey(key))
            {
                return json.getDouble(key);
            }
        }
        catch (JSONException e)
        {
            // 这里无需将异常向外抛出，后续可以在此专门记录服务端的错误
            e.printStackTrace();
        }
        return 0;
    }

    public static BigDecimal getBigDecimal(String key, JSONObject json)
    {
        if (json == null)
        {
            return BigDecimal.ZERO;
        }
        try
        {
            if (json.containsKey(key))
            {
                return json.getBigDecimal(key);
            }
        }
        catch (JSONException e)
        {
            // 这里无需将异常向外抛出，后续可以在此专门记录服务端的错误
            e.printStackTrace();
        }
        return BigDecimal.ZERO;
    }


    public static void putObject(String key, Object value, JSONObject json)
    {
        if (json == null)
        {
            return;
        }

        try
        {
            json.put(key, value);
        }
        catch (JSONException e)
        {
            // 这里无需将异常向外抛出，后续可以在此专门记录服务端的错误
            e.printStackTrace();
        }
    }

    public static JSONArray getJSONArray(String key, JSONObject json)
    {
        JSONArray value = new JSONArray();

        if (json == null)
        {
            return value;
        }

        try
        {
            if (json.containsKey(key))
            {
                value = json.getJSONArray(key);
            }
        }
        catch (JSONException e)
        {
            // 这里无需将异常向外抛出，后续可以在此专门记录服务端的错误
            e.printStackTrace();
        }

        return value;
    }

    public static JSONArray getJSONArray(int index, JSONArray json)
    {
        JSONArray value = new JSONArray();

        if (json == null||json.size()==0)
        {
            return value;
        }

        try
        {
                value = json.getJSONArray(index);
        }
        catch (JSONException e)
        {
            // 这里无需将异常向外抛出，后续可以在此专门记录服务端的错误
            e.printStackTrace();
        }

        return value;
    }


    public static JSONObject getJSONObject(int index, JSONArray json)
    {
        JSONObject value = new JSONObject();

        if (json == null || json.size() == 0)
        {
            return value;
        }

        try
        {
            value = json.getJSONObject(index);
        }
        catch (JSONException e)
        {
            // 这里无需将异常向外抛出，后续可以在此专门记录服务端的错误
            e.printStackTrace();
        }

        return value;
    }

    public static String getString(int index, JSONArray json)
    {
        String value = "";

        if (json == null || json.size() == 0)
        {
            return value;
        }

        try
        {
            value = json.getString(index);
        }
        catch (JSONException e)
        {
            // 这里无需将异常向外抛出，后续可以在此专门记录服务端的错误
            e.printStackTrace();
        }

        return value;
    }

    public static JSONObject getJSONObject(String key, JSONObject json)
    {
        JSONObject value = new JSONObject();

        if (json == null)
        {
            return value;
        }

        try
        {
            if (json.containsKey(key))
            {
                value = json.getJSONObject(key);
            }
        }
        catch (JSONException e)
        {
            // 这里无需将异常向外抛出，后续可以在此专门记录服务端的错误
            e.printStackTrace();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        return value;
    }
}
